home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 04 (1982-12)(Softdisk)(Side B).zip / Softdisk Magazette Volume 2, No. 04 (1982-12)(Softdisk)(Side B).do / TOWERS.OF.HANOI.bas < prev    next >
BASIC Source File  |  1996-12-24  |  8KB  |  92 lines

  1. 10  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>---------------<CTRL-M>TOWERS OF HANOI<CTRL-M>---------------<CTRL-M>
  2. 20  REM   POKE <UNKNOWN TOKEN> PLOT 0<CTRL-C> HLIN 1<CTRL-C> CALL 2<CTRL-C> ASC DEF  = <CTRL-B> ASC POKE   POKE <UNKNOWN TOKEN> PLOT 3<CTRL-C> HLIN 5<CTRL-C> CALL 6<CTRL-C> IF 0<CTRL-C> PLOT 4<CTRL-C> IF 0<CTRL-C> RESTORE 1<CTRL-C> RUN 2<CTRL-C> <CTRL-Q><UNKNOWN TOKEN> IF 5<CTRL-C> RESTORE 6<CTRL-C> RUN 4<CTRL-C> :<UNKNOWN TOKEN><UNKNOWN TOKEN>0<CTRL-C><UNKNOWN TOKEN>4<CTRL-C> IF 0<CTRL-C>  AND 3<CTRL-C> HGR2  SQR`.................................................<CTRL-M><CTRL-M><CTRL-M>CUTE, EH?<CTRL-M><CTRL-M>
  3. 21  REM  SPEED= <CTRL-A> DEL &  NOT & SPEED=   DEL ' COLOR= <CTRL-A> GR  SPEED= <UNKNOWN TOKEN>8<UNKNOWN TOKEN>& HGR & ASC& = <UNKNOWN TOKEN> ASC' ONERR ' -@ HGR2 <UNKNOWN TOKEN>`................................................................<CTRL-M><CTRL-M>HERE'S MORE!<CTRL-M><CTRL-M>
  4. 30  POKE 1014,68: POKE 1015,8: POKE 1013,76
  5. 35  ONERR  GOTO 1700
  6. 40  TEXT : HOME : INVERSE : POKE 48,32: GOSUB 1000: SPEED= 255
  7. 45  POKE 48,160: HLIN 1,38 AT 2: HLIN 1,38 AT 3: HLIN 1,38 AT 45: HLIN 1,38 AT 44: VLIN 2,45 AT 1: VLIN 2,45 AT 38
  8. 50 A$ = "TOWERS OF HANOI": GOSUB 1400: VTAB 3: PRINT :A$ = "BY T.M.H. ENTERPRISES": GOSUB 1400: VTAB 8: PRINT 
  9. 55  HLIN 4,35 AT 10: HLIN 4,35 AT 11: HLIN 4,35 AT 36: HLIN 4,35 AT 37: VLIN 10,37 AT 4: VLIN 10,37 AT 35
  10. 60 A$ = "INSTRUCTIONS? " + CHR$(91) +" ]": HTAB 10: VTAB 12: GOSUB 1300:A$ = "YN": SPEED= 30: HTAB 25: GOSUB 1100:AN$ =  CHR$( PEEK( -16384) -128): POKE  -16368,0: SPEED= 255
  11. 65  NORMAL 
  12. 70  IF AN$ = "N"  THEN 200
  13. 72  IF AN$ < >"Y"  THEN  PRINT : INVERSE : GOTO 60
  14. 75  GOSUB 1500:A$ = "TOWERS OF HANOI": GOSUB 1400: PRINT :A$ = "---------------": GOSUB 1400
  15. 76  PRINT 
  16. 80  VTAB 5:A$ = "  TOWERS OF HANOI IS AN INTERESTING     PUZZLE.  YOU MUST START OUT WITH A      NUMBER OF RINGS ON A POST, AND GET THEM TO ANOTHER POST.  THERE ARE RULES       GOVERNING HOW YOU MAY MOVE THE RINGS    ": GOSUB 1200
  17. 85 A$ = "WHICH ARE AS FOLLOWS:": GOSUB 1200: PRINT : PRINT :A$ = "1)  THERE ARE THREE POSTS, AND YOU START    OUT ON THE LEFTMOST ONE.  YOU MUST      MOVE THE RINGS TO THE RIGHTMOST ONE.": GOSUB 1200: PRINT 
  18. 90 A$ = "2)  A LARGER RING MAY NOT BE STACKED ON     A SMALLER ONE.": GOSUB 1200: PRINT : PRINT :A$ = "3)  YOU MAY MOVE ONLY ONE RING AT A         TIME.": GOSUB 1200: PRINT : PRINT 
  19. 95 A$ = "HIT A KEY PLEASE " + CHR$(91) +" ]": PRINT : PRINT : GOSUB 1400: HTAB 29:A$ = "/-\!": SPEED= 100: GOSUB 1100: SPEED= 255: GOSUB 1500: POKE  -16368,0
  20. 100 A$ = "INSTRUCTIONS CONTINUED": GOSUB 1400: PRINT :A$ = "----------------------": GOSUB 1400: PRINT : VTAB 5
  21. 105 A$ = "   YOU MAY CHOOSE THE NUMBER OF RINGS   ON THE FIRST POST TO BE FROM 1 (MORON   LEVEL) TO 10 (TMH LEVEL).": GOSUB 1200: PRINT : PRINT :A$ = "THERE IS A FORMULA FOR THE LEAST NUMBER OF MOVES POSSIBLE WHICH IS:": GOSUB 1200: PRINT 
  22. 110  PRINT :A$ = "  (2^N)-1 = NUMBER OF MOVES": GOSUB 1400: PRINT : PRINT :A$ = " WHERE N IS THE NUMBER OF RINGS TOTAL.": GOSUB 1200: PRINT : PRINT 
  23. 115 A$ = "I WILL JUDGE YOUR PERFORMANCE AGAINST   THIS MINIMUM NUMBER OF MOVES.": GOSUB 1200: PRINT : PRINT : PRINT :A$ = "HIT A KEY TO START " + CHR$(91) +" ]": GOSUB 1400
  24. 120 A$ = "/-\!": SPEED= 100: HTAB 30: GOSUB 1100: SPEED= 255: POKE  -16368,0
  25. 200  GOSUB 1500: CLEAR : LOMEM: 16384
  26. 210 A$ = "HOW MANY RINGS WOULD YOU LIKE TO WORK   WITH? (FROM ONE TO TEN) -- ": GOSUB 1300: INPUT A$:R =  VAL(A$): IF R <1  OR R >10  THEN  PRINT : GOTO 210
  27. 215 R = R -1
  28. 220  DIM VA(2,9): DIM HC(9): FOR I = 0 TO 4: READ A:HC(I) = A:HC(I +5) = A: NEXT 
  29. 222  DATA 3,5,6,1,2
  30. 225  HGR : GOSUB 1600
  31. 230  FOR I = 0 TO 2: FOR J = 0 TO 9:VA(I,J) =  -1: NEXT : NEXT : FOR I = 9 TO 9 -R  STEP  -1:VA(0,I) = I: NEXT :A = 0: GOSUB 1900
  32. 240  VTAB 21: INVERSE :A$ = "+   POLE 1   +   POLE 2   +   POLE 3   +                                        ": GOSUB 1300
  33. 250  POKE 34,22
  34. 255 OP = 2 ^(R +1) -1
  35. 260  VTAB 22: INVERSE :A$ = "MOVES " + STR$(MO) +"  OPTIMUM " + STR$(OP): GOSUB 1400: NORMAL 
  36. 270  VTAB 23: HTAB 1:A$ = "POLE " + CHR$(91) +" ] TO POLE " + CHR$(91) +" ] ?": GOSUB 1200: HTAB 7
  37. 280  GET A$: PRINT A$;: IF A$ <"1"  OR A$ >"3"  THEN 270
  38. 285 A =  VAL(A$) -1: FOR I = 0 TO 9: IF VA(A,I) =  -1  THEN 290
  39. 287 B = VA(A,I): GOTO 295
  40. 290  NEXT : PRINT :A$ = "THERE'S NOTHING THERE!<CTRL-G>": GOSUB 1300: CALL  -868: GOTO 270
  41. 295  HTAB 19: GET A$: PRINT A$;: IF A$ <"1"  OR A$ >"3"  THEN 270
  42. 297 C =  VAL(A$) -1: IF C = (A)  THEN  PRINT :A$ = "THAT'S WHERE YOU GOT IT FROM!<CTRL-G>": GOSUB 1300: CALL  -868: GOTO 270
  43. 300  PRINT : CALL  -868: GOSUB 2000: GOSUB 1800: GOTO 260
  44. 999  END 
  45. 1000  FOR I = 0 TO 39: VLIN 0,47 AT I: NEXT : RETURN 
  46. 1100 I1 =  PEEK(37) +1:I2 =  PEEK(36) +1
  47. 1105  FOR I = 1 TO  LEN(A$): VTAB I1: HTAB I2: PRINT  MID$ (A$,I,1);: IF  PEEK( -16384) >128  THEN 1115
  48. 1110  NEXT : IF  PEEK( -16384) <128  THEN 1105
  49. 1115  FOR I = 1 TO 1: NEXT : VTAB I1: HTAB I2: RETURN 
  50. 1200  FOR I = 1 TO  LEN(A$): INVERSE : PRINT " ";: NORMAL : PRINT  CHR$(8) MID$ (A$,I,1);: NEXT 
  51. 1205  RETURN 
  52. 1300  POKE 810,160: POKE 811,19: POKE 812,32: POKE 813,228: POKE 814,251: POKE 815,96
  53. 1305  FOR I = 1 TO  LEN(A$):I1$ =  MID$ (A$,I,1): IF I1$ < >" "  THEN  CALL 810
  54. 1310  PRINT I1$;: IF I1$ = "."  OR I1$ = "?"  OR I1$ = "!"  THEN  FOR I1 = 1 TO 120: NEXT 
  55. 1315  NEXT 
  56. 1320  RETURN 
  57. 1400 A$ =  LEFT$(A$,40):I2 =  PEEK(37) +1: IF  LEN(A$)/2 < > INT( LEN(A$)/2)  THEN A$ = A$ +" "
  58. 1405  FOR I = 1 TO  LEN(A$)/2: VTAB I2: HTAB 21 -I: PRINT  LEFT$(A$,I) RIGHT$(A$,I);: NEXT 
  59. 1410  RETURN 
  60. 1500  VTAB 24: FOR I = 1 TO 24: PRINT :P =  PEEK( -16336) + PEEK( -16336): NEXT : HOME : RETURN 
  61. 1600  HCOLOR= 5: & 0,140,92,160: & 186,140,279,160: HCOLOR= 6: & 93,140,185,160
  62. 1610  HCOLOR= 1: & 41,10,51,139: & 227,10,237,139: HCOLOR= 2: & 134,10,144,139
  63. 1615  HCOLOR= 4: FOR I = 225 TO 39  STEP  -93: FOR J = I TO I -36  STEP  -4: HPLOT J,140 TO J,140 +(I -J)/4 +1: NEXT : NEXT 
  64. 1620  RETURN 
  65. 1700  POKE 216,0: TEXT : HOME : NORMAL : SPEED= 255: END 
  66. 1800  FOR I = 9 TO 9 -R  STEP  -1: IF VA(2,I) < >I  THEN I =  -1: NEXT : RETURN 
  67. 1802  NEXT 
  68. 1803  TEXT : HOME : POKE  -16304,0: VTAB 21:A$ = "THAT'S IT!": GOSUB 1400
  69. 1805  POP : FOR I = 1 TO 20: CALL 2260: NEXT 
  70. 1810  FOR I = 1 TO 2000: TEXT : HOME :A$ = "TOWERS OF HANOI END": GOSUB 1400: PRINT :A$ = "-------------------": GOSUB 1400: PRINT : PRINT : PRINT 
  71. 1815  PRINT "YOU<CTRL-G> HAVE<CTRL-G> WON!<CTRL-G><CTRL-G><CTRL-G>": PRINT : PRINT :A$ = "MOVES " + STR$(MO) +"   OPTIMUM NUMBER " + STR$(OP) +".": GOSUB 1400: PRINT : PRINT 
  72. 1820 A$ = "YOU ARE " + STR$(100 -(MO -OP)/OP *100) +"% EFFICIENT.": GOSUB 1300: PRINT : PRINT 
  73. 1825  PRINT :A$ = "PLAY AGAIN? " + CHR$(91) +" ]": GOSUB 1200: HTAB 14:A$ = "YN": SPEED= 30: GOSUB 1100: SPEED= 255:AN$ =  CHR$( PEEK( -16384) -128): POKE  -16368,0: IF AN$ < >"N"  THEN 200
  74. 1830  PRINT : PRINT : END 
  75. 1900 OF = A *93 +4: FOR I = 11 TO 130  STEP 13:E = VA(A,(I -11)/13): IF E > -1  THEN 1910
  76. 1905  HCOLOR= 0: & OF,I,OF +36,I +12: & OF +48,I,OF +89,I +12: HCOLOR= 1 +(A = 1): & OF +37,I,OF +47,I +12: GOTO 1920
  77. 1910  HCOLOR= HC(E): & OF +36 -(E *4),2 +I,OF +48 +E *4,12 +I
  78. 1920  NEXT I: RETURN 
  79. 2000  FOR I = 0 TO 9: IF VA(A,I) =  -1  THEN 2005
  80. 2002  IF VA(A,I) < >B  THEN  STOP 
  81. 2004 E = I: GOTO 2010
  82. 2005  NEXT : GOTO 2002
  83. 2010  FOR I = 0 TO 9: IF VA(C,I) =  -1  THEN 2015
  84. 2012  IF VA(C,I) <B  THEN  PRINT :A$ = "YOU CAN'T PUT BIG ONTO SMALL!<CTRL-G>": GOSUB 1300: CALL  -868: RETURN 
  85. 2014  GOTO 2020
  86. 2015  NEXT 
  87. 2020 P = I -1: HCOLOR= 0:OF = A *93 +4: & OF,E *13 +13,OF +36,E *13 +23: & OF +48,E *13 +13,OF +87,E *13 +23: HCOLOR= 1 +(A = 1): & OF +37,E *13 +13,OF +47,E *13 +23
  88. 2025  HCOLOR= HC(B):OF = C *93 +4: & OF +36 -B *4,13 +13 *P,OF +48 +B *4,P *13 +23:VA(A,E) =  -1:VA(C,P) = B:MO = MO +1: RETURN 
  89. 3000  REM <CTRL-J><CTRL-J>
  90. 4000  REM <CTRL-M>DON'T MESS WITH ANYTHING<CTRL-M>BEFORE LINE 30 OR THE<CTRL-M>PROGRAM WILL BE IRREVERSIBLY<CTRL-M>SCREWED UP.<CTRL-M><CTRL-M><CTRL-M>
  91. 4010  REM <CTRL-M><CTRL-M>PROGRAM BY:<CTRL-M>CHRIS KOERITZ<CTRL-M>RT. 5, BOX 331B<CTRL-M>CHAR'VILLE, VA 22901<CTRL-M>WRITE IF YOU HAVE PROBLEMS<CTRL-M><CTRL-M><CTRL-M>
  92. 63999  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>======<CTRL-M>BY TMH ---<CTRL-M>======<CTRL-M>